package com.kexio.enterprise.integration.notification.query;

import com.kexio.enterprise.integration.notification.enums.NotificationChannel;
import com.kexio.enterprise.integration.notification.enums.NotificationPriority;
import com.kexio.enterprise.integration.notification.enums.NotificationStatus;
import com.kexio.enterprise.integration.notification.enums.NotificationType;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 通知搜索条件
 * 
 * @author Kexio
 * @since 1.0.0
 */
public class NotificationSearchCriteria {
    private List<String> notificationIds;
    private Long userId;
    private List<NotificationType> types;
    private List<NotificationStatus> statuses;
    private List<NotificationPriority> priorities;
    private List<NotificationChannel> channels;
    private String title;
    private String content;
    private String senderType;
    private Long senderId;
    private LocalDateTime startTime;
    private LocalDateTime endTime;
    private boolean includeRead;
    private boolean includeExpired;
    private List<String> tags;
    private int limit;
    private int offset;
    private String sortBy;
    private boolean ascending;

    public NotificationSearchCriteria() {
        this.limit = 50;
        this.offset = 0;
        this.sortBy = "createTime";
        this.ascending = false; // 默认降序，最新的在前
        this.includeRead = true;
        this.includeExpired = false;
    }

    // Getters and Setters
    public List<String> getNotificationIds() { return notificationIds; }
    public void setNotificationIds(List<String> notificationIds) { this.notificationIds = notificationIds; }
    
    public Long getUserId() { return userId; }
    public void setUserId(Long userId) { this.userId = userId; }
    
    public List<NotificationType> getTypes() { return types; }
    public void setTypes(List<NotificationType> types) { this.types = types; }
    
    public List<NotificationStatus> getStatuses() { return statuses; }
    public void setStatuses(List<NotificationStatus> statuses) { this.statuses = statuses; }
    
    public List<NotificationPriority> getPriorities() { return priorities; }
    public void setPriorities(List<NotificationPriority> priorities) { this.priorities = priorities; }
    
    public List<NotificationChannel> getChannels() { return channels; }
    public void setChannels(List<NotificationChannel> channels) { this.channels = channels; }
    
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    
    public String getContent() { return content; }
    public void setContent(String content) { this.content = content; }
    
    public String getSenderType() { return senderType; }
    public void setSenderType(String senderType) { this.senderType = senderType; }
    
    public Long getSenderId() { return senderId; }
    public void setSenderId(Long senderId) { this.senderId = senderId; }
    
    public LocalDateTime getStartTime() { return startTime; }
    public void setStartTime(LocalDateTime startTime) { this.startTime = startTime; }
    
    public LocalDateTime getEndTime() { return endTime; }
    public void setEndTime(LocalDateTime endTime) { this.endTime = endTime; }
    
    public boolean isIncludeRead() { return includeRead; }
    public void setIncludeRead(boolean includeRead) { this.includeRead = includeRead; }
    
    public boolean isIncludeExpired() { return includeExpired; }
    public void setIncludeExpired(boolean includeExpired) { this.includeExpired = includeExpired; }
    
    public List<String> getTags() { return tags; }
    public void setTags(List<String> tags) { this.tags = tags; }
    
    public int getLimit() { return limit; }
    public void setLimit(int limit) { this.limit = limit; }
    
    public int getOffset() { return offset; }
    public void setOffset(int offset) { this.offset = offset; }
    
    public String getSortBy() { return sortBy; }
    public void setSortBy(String sortBy) { this.sortBy = sortBy; }
    
    public boolean isAscending() { return ascending; }
    public void setAscending(boolean ascending) { this.ascending = ascending; }
}
